﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;

namespace FrogEngine
{
	public interface ICamera : ILogical, IHandlesAllInput, IGameEntity
	{
		/// <summary>
		/// Position in world space
		/// </summary>
		Vector3 Position { get; set; }

		/// <summary>
		/// Velocity of the camera
		/// </summary>
		Vector3 Velocity { get; set; }

		/// <summary>
		/// Vector sum of all forces on the camera
		/// </summary>
		Vector3 Force { get; set; }

		/// <summary>
		/// Camera's mass
		/// </summary>
		float Mass { get; set; }

		/// <summary>
		/// Forward vector of camera's orthonormal basis
		/// </summary>
		Vector3 Forward { get; set; }

		/// <summary>
		/// Right vector of camera's orthonormal basis
		/// </summary>
		Vector3 Right { get; set; }

		/// <summary>
		/// Up vector of camera's orthonormal basis
		/// </summary>
		Vector3 Up { get; set; }

		/// <summary>
		/// Camera's field of view
		/// </summary>
		float Fov { get; set; }

		/// <summary>
		/// Aspect Ratio of Game
		/// </summary>
		float AspectRatio { get; set; }

		/// <summary>
		/// Near distance
		/// </summary>
		float NearPlane { get; set; }

		/// <summary>
		/// Far distance
		/// </summary>
		float FarPlane { get; set; }

		/// <summary>
		/// How sensitive the controls are
		/// </summary>
		int LookSensitivity { get; set; }

		Matrix View { get; }

		Matrix Projection { get; }
	}
}
